<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
require_once "coneccionbdd.php";

//ini_set("default_charset", "utf8");
//require_once "conexion.php";
/**
 * Metodos donde se cambia los datos
 * 1,2,4,6 de acuerdo a la tabla 
 */
class cliente {//Este Nombre tambien toca cambiar en las demas es l mismo nombre dl archivo

    public static function getTipoRolesUser($user_name, $conecta) {
        $query = "SELECT r.rol_descripcion,u.id,u.usuario_nombre FROM usuarios_roles t
        inner join usuarios u on t.id_usuario
        inner join roles r on t.id_rol
        where u.usuario_nombre='$user_name' group by r.rol_descripcion";
        $resultado = mysqli_query($conecta, $query);
        $array_roles = array();
        while ($fila = mysqli_fetch_array($resultado)) {
            array_push($array_roles, $fila);
        }
        return $array_roles;
    }

    // VALIDACION CAMPOS

    /**
     * 1)
     * Estos campos son exclusivos de la tabla de clientes
     * y se sabe si son reqeridos observando en la bdd en la opcion si es nullo
     * @return type
     */
    public static function getCamposObligatorios() {
        return array(
            'nombres' => 'nombres',
            'apellidos' => 'apellidos',
            'direccion' => 'direccion',
            'documento' => 'documento',
            'telefono' => 'telefono',
            'celular' => 'celular'
        );
    }

    /**
     * 2)Estos campos son exclusivos de la tabla de clientes
     * @return type
     */
    public static function getCamposTabla() {
        return array(
            'nombres',
            'apellidos',
            'direccion',
            'documento',
            'telefono',
            'celular'
        );
    }

    /**
     * 3)
     * @param type $data
     * @return type
     */
    public static function getMsjCamposObligatorios($data) {
        $camposobligatorios = static::getError($data);
        return array(
            'success' => $camposobligatorios["guardar"],
            'errors' => $camposobligatorios["errores"]
        );
    }

    /**
     * 4)
     * @return type retorna un arreglo con los mensjes para cada campo obligatorio
     */
    public static function getMensajes() {
        return array(
            'nombres' => array('El Nombre es Obligatorio.'),
            'apellidos' => array('El Apellido es Obligatorio.'),
            'direccion' => array('La Direccion es Obligatoria.'),
            'documento' => array('La Cedula/Ruc es Obligatorio.'),
            'telefono' => array('Telefono es Obligatorio.'),
            'celular' => array('Celular es Obligatorio.'),
        );
    }

    /**
     * 5) Retorna cuales son los campos obligatorios y no estan asignados valores
     * @param type $data=los datos a verifiar
     * @return type=array
     */
    public static function getError($data) {
        $camposobligatorios = static:: getCamposObligatorios();
        $mensajes_campos = static::getMensajes();
        $arrayerrors = array();
        $guardar = true;
        foreach ($data as $key => $value) {
            $existe_campo = array_key_exists($key, $camposobligatorios);
            if ($existe_campo) {
                $hay_dato = ($value == null || $value == "") ? false : true; //Verifica que el campono este nullo ni vacio
                if (!$hay_dato) {
                    $guardar = false;
                    $arrayerrors[$key] = $mensajes_campos[$key];
                }
            }
        }
        $resultado = array('guardar' => $guardar, 'errores' => $arrayerrors);
        return $resultado;
    }

    // INSERTAR , ACTUALIZAR Y ELIMINAR

    /**
     * 6) 
     * @param type $datos es un arreglo con n posiciones dependiendo de latabla
     * @param type $conecta
     * @return type true o false si s inserto o no
     */
    public static function setInsertar($datos) {

        $nombres = $datos["nombres"];
        $apellidos = $datos["apellidos"];
        $direccion = $datos["direccion"];
        $documento = $datos["documento"];
        $telefono = $datos["telefono"];
        $celular = $datos["celular"];
        $query = "INSERT INTO cliente (nombres, apellidos, direccion, documento, telefono, celular) "
                . "VALUES ('$nombres','$apellidos','$direccion','$documento','$telefono','$celular')";
        $resultado = mysqli_query(coneccionbdd::getConectar(), $query);
        mysqli_close(coneccionbdd::getConectar()); // Cerramos la conexion con la base de datos
        return $resultado;
    }

    public static function setActualizar($datos) {
        $id = $datos["id"];
        $nombres = $datos["nombres"];
        $apellidos = $datos["apellidos"];
        $direccion = $datos["direccion"];
        $documento = $datos["documento"];
        $telefono = $datos["telefono"];
        $celular = $datos["celular"];

        $sql = "UPDATE cliente SET "
                . "id='$id',nombres='$nombres', apellidos='$apellidos', direccion='$direccion', documento='$docuemento', telefono='$telefono', celular='$celular' "
                . "WHERE id='$id'";
        $resultado = mysqli_query(coneccionbdd::getConectar(), $sql);
        mysqli_close(coneccionbdd::getConectar()); // Cerramos la conexion con la base de datos
        return $resultado;
    }

    public static function setEliminar($datos) {
        $id = $datos["id"];
        $sql = "DELETE from cliente WHERE id='$id";

        $resultado = mysqli_query(coneccionbdd::getConectar(), $sql);
        mysqli_close(coneccionbdd::getConectar()); // Cerramos la conexion con la base de datos
        return $resultado;
    }

    
    //OBTENER DATOS DE LOS CLIENTES PARA EL GRID
    
    public static function getClienteTotal() {
        $query = "SELECT * FROM cliente t";
        $resultado = mysqli_query(coneccionbdd::getConectar(), $query);

        $array_consulta = array();
        $count = 0;
        while ($fila = mysqli_fetch_array($resultado)) {
            array_push($array_consulta, $fila);
            $count++;
        }
        $array_resultado = array('total' => $count, 'result' => $array_consulta);
        return $array_resultado;
    }

    /**
     * Metodo para mostrar la informacion en el grid
     * segun su paginacion
     * @param type $limit
     * @param type $offset
     * @return array
     */
    public static function getClienteTotalRango($limit, $offset) {
        $query = "SELECT * FROM cliente t limit $offset, $limit";
        $resultado = mysqli_query(coneccionbdd::getConectar(), $query);
        $array_consulta = array();
        $count = 0;
        while ($fila = mysqli_fetch_array($resultado)) {
            array_push($array_consulta, $fila);
            $count++;
        }
        $array_resultado = array('total' => $count, 'result' => $array_consulta);
        return $array_resultado;
    }

    /**
     * Mostrar solo los 10primeros datos de los clientes 
     * Para el grid
     * @param type $data
     * @return type
     */
    public static function getCliente($data) {
        //Informacion Total
        $totalInformacion = static::getClienteTotal();
        $command_total = $totalInformacion['total'];
        //total
        $result['total'] = (int) $command_total;
        $current_page = isset($data['current']) ? (int) $data['current'] : 0; // control a error when 'current' not exist
        $limit = isset($data['rowCount']) ? $data['rowCount'] : 10;
        $offset = ($limit * ($current_page - 1));
        $result['current'] = $current_page;
        $result['rowCount'] = $limit;
        $resultadoPaginacion = static::getClienteTotalRango($limit, $offset);
        $result['rows'] = $result['total'] != 0 ? $resultadoPaginacion['result'] : array();
        return $result;
    }

    
    
    
    
    // OBTIENE LA INFORMACION DE CLIENTES POR BUSQUEDA
    
    public static function getInfoClientesData() {
//SELECT t.id, 
//concat( t.nombres," ",t.apellidos) as text
//FROM cliente t
//;
        $array_result = array();
        $conexion = new coneccionbdd();
        $query = "Select t.id, t.apellidos as text from cliente t limit 10";
        $array_result = $conexion->ObtenerResultado($query);
        return $array_result;
    }

    /**
     * Buscar lainformacion de un cliente en funcion del dato q envien
     * en los campos cedula y apèlllidos
     * @param string $search_value
     * @return type
     */
    public static function getInfoClientesDatalike($search_value) {

//SELECT t.id, 
//concat( t.nombres," ",t.apellidos) as text
//FROM cliente t
//where t.documento like  concat( "1s0","%") OR t.apellidos like concat("miguel","%")
//
//
//;

        $array_result = array();
        $conexion = new coneccionbdd();
        $query = "Select t.id, concat(t.nombres, ' 't.apellidos) as text from cliente t where t.documento like concat( $search_value, '%') OR t.apellidos like concat( $search_value, '%') limit 10";
        $array_result = $conexion->ObtenerResultado($query);
        return $array_result;
    }

    /**
     * Obtiene toda linformacion de un cliente 
     * en funcion de su id
     * @param int $id_cliente
     */
    public static function getInfoClientesDataIdCliente($id_cliente) {
        $array_result = array();
        $conexion = new coneccionbdd();
        $query = "Select * from cliente t "
                . "where t.id='$id_cliente'";
        $array_result = $conexion->ObtenerResultado($query);
        return $array_result;
    }

    /**
     * Este metodo llena la informacion del drop de clientes
     * @param type $search_value es l valor a buscar puede ser la cedula o l apellido
     * @return type
     */
    public static function getListSelect2($search_value = null) {
        $array_result = array();
        $conexion = new coneccionbdd();
        $q = '';        //    create variable for input
        $q .= " SELECT ";
        $q .= " t.id,t.apellidos as text ";
        $q .= " FROM ";
        $q .= " cliente t ";
        $q .= " WHERE ";
        $q .= " t.documento like ? ";
        $q .= " OR ";
        $q .= " t.documento like ? ";
        $q .= "limit 10 ";
//        $array_result = $search_value ? $conexion->ObtenerResultadoSelectLikeCliente($q, $search_value) : static::getInfoClientesData();
        $array_result = $search_value ? $conexion->ObtenerResultado('Call pa_detalle_cliente("' . $search_value . '")') : $conexion->ObtenerResultado("Select t.id, t.documento as text from cliente t limit 10");
        return $array_result;
    }

}
